package com.train.chatspring.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 文件服务类，用于处理文件上传和下载功能
 */
@Service
public class FileService {

    @Value("${spring.web.resources.static-locations}")
    private String staticLocations;

    /**
     * 上传文件到指定目录
     *
     * @param file 要上传的文件
     * @return 文件存储路径
     * @throws IOException 如果文件操作失败
     */
    public String uploadFile(MultipartFile file) throws IOException {
        // 使用配置中的静态资源路径
        String directoryPath = staticLocations;

        // 获取文件名和存储路径
        String fileName = file.getOriginalFilename();
        Path filePath = Paths.get(directoryPath, fileName);

        // 检查文件是否已存在
        if (Files.exists(filePath)) {
            // 删除已存在的文件
            Files.delete(filePath);
        }

        // 确保目录存在
        Files.createDirectories(filePath.getParent());

        // 保存新文件
        file.transferTo(filePath.toFile());

        return fileName;
    }

    /**
     * 下载文件内容
     *
     * @param fileName 文件名
     * @return 文件字节数组
     * @throws IOException 如果文件读取失败
     */
    public byte[] downloadFile(String fileName) throws IOException {
        // 获取当前运行目录并拼接上传目录
        String directoryPath = staticLocations + File.separator;

        // 构建文件路径
        Path filePath = Paths.get(directoryPath, fileName);

        // 读取文件内容
        return Files.readAllBytes(filePath);
    }
}